import {listModule, addModule, updateModule, removeModule} from '_api/system/module'
import {_Promise} from "_libs/util";
import Vue from "vue";

export default {
  namespaced: true,
  state: {
    moduleList: []
  },
  mutations: {
    setModuleList(state, moduleList) {
      state.moduleList = moduleList
    },
    addModule(state, module) {
      state.moduleList.unshift(module);
    },
    updateModule(state, module) {
      for (let i = 0; i < state.moduleList.length; i++) {
        let existsModule = state.moduleList[i];
        if (existsModule.id === module.id) {
          let keys = Object.keys(existsModule);
          keys.forEach(key => {
            Vue.set(state.moduleList[i], key, module[key])
          })
          break
        }
      }
    },
    removeModule(state, module) {
      state.moduleList = state.moduleList.filter(existsModule => {
        if (existsModule.id !== module.id) {
          return existsModule;
        }
      })
    }
  },
  actions: {
    // 获取所有模块
    listModule({state, commit}) {
      return _Promise(listModule(), res => {
        commit('setModuleList', res.data)
      })
    },

    // 添加模块
    addModule({state, commit}, module) {
      return _Promise(addModule(module), res => {
        commit('addModule', res.data)
      })
    },

    // 更新模块
    updateModule({state, commit}, module) {
      return _Promise(updateModule(module), res => {
        commit('updateModule', res.data)
      })
    },

    // 删除模块
    removeModule({state, commit}, module) {
      return _Promise(removeModule(module.id), res => {
        commit('removeModule', module)
      })
    }
  }
}
